package top.dbpanda.cmsjpa.learn.thread.juc.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

/**
 * 线程池
 *
 * @author 20018954
 */
public class TestPool {
    /**
     * 5种创建方式
     *
     * @param args
     */
    public static void main(String[] args) {
        //创建只有一个的线程的线程池 如果往该线程池种提交多个任务，那么这些任务将会被同一个线程执行
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        //创建多个存在的线程的线程池 这些线程可以同时执行 默认空闲60s 会从池中删除
        ExecutorService executorService1 = Executors.newCachedThreadPool();
        //获取CPU核数
        int i = Runtime.getRuntime().availableProcessors();
        //创建拥有固定线程数的线程池 某个线程没有响应 也不会删除 一般情况下与CPU的核数保持一致
        ExecutorService executorService2 = Executors.newFixedThreadPool(i);
        //ExecutorService 可以使用submit() 提交Callable 或 Runnable类型数据任务 线程执行完毕返回到Future对象中
        //ScheduledExecutorService 可以设定执行时间
        //创建一个可以任务调度的 只有一个线程的 线程池 任务调度：让用户在指定的时间执行
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        //创建可以任务调度的线程池 多个线程
        ScheduledExecutorService scheduledExecutorService1 = Executors.newScheduledThreadPool(i);



    }
}
